Perf & Flame Graph 介绍和使用
Flame Graph可以提供可视化的性能分析能力,以SVG格式呈现,可缩放查看局部,方便快速定位出CPU效能瓶颈。Flame Graph统计了采样周期内,code-path被执行的时间比例,纵轴是code-path,从下至上一般就是call stack。横轴是某个stack的占用时间,跨度越大说明其占CPU比重越高,也就是最耗费CPU的,stack在横轴上是按照字母序排列的,颜色深浅仅仅是为了区分,并没特殊意义。
以下将说明Flame Graph产生流程:
-
用perf获取系统执行状态
-
Step 1:在EVB上执行perf record
# ./perf record -a -g sleep 10 -a 表示cpu -o 指定输出文件,若未指定则自动在当前目录下存盘名为perf.data -g 纪录call stack sleep 指定持续时间, 单位为秒
若执行时显示,表示系统缺少GCC runtime library, 请把libgcc_s.so.1放到 /mnt或其他路径下, 并将该路径加入LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=/mnt:/lib
-
Step 2:执行 perf report展开刚刚存下的data进行分析
# ./perf report
将直接在console上显示各个leaf functions的call stack及运行时间比例
若要直接进行FlameGraph分析, 则不一定要进行 perf report
-
-
用data产生火焰图
-
Step 1:在EVB上执行 perf script 对 data进行解析, 并将输出结果存档至p1
# ./perf script -i perf.data > p1
-
Step 2:切换到PC端, 点击获取FlameGraph,于PC端执行FlameGraph提供的stackcollapse-perf指令对p1进行符号折迭并存盘
# stackcollapse-perf.pl p1 &> perf.folder
-
Step 3:于PC端执行FlameGraph提供的p1将perf.folder转换为svg档,生成的svg档可直接用浏览器开启 (建议使用Chrome或Firefox)
# flamegraph.pl perf.folder > perf.svg
生成火焰图(Flame Graph)命令:
./perf record -a -g -F 2599 -p 451 sleep 30 ./perf script -i perf.data > p1 ./stackcollapse-perf.pl p1 &> perf.folder ./flamegraph.pl perf.folder > perf.svg
-
参考: